#
# StartTCL: n
#
# ====================================
#
# Gurubashi Booty Run Event script by jrtashjan
#
# ====================================
#
# Modified by Delfin
# 10.05.06
#
# Start-TCL 0.9.4 compatible
#

package require sqlite3
sqlite3 pvparena "saves/pvparena.db"
namespace eval ::GArena {
	variable game_started 0
	variable guards_killed 0
	variable pvpon 1
	variable remain
	variable last_event [ clock seconds ]
	variable timediff 86400
}
 proc ::GArena::create_arenadb { player cargs } {
	if { [ ::GetPlevel $player ] < 6 } { return "Du bist nicht berechtigt diesen Befehl zu benutzen!" }
	if { $cargs == "redo" } {
		pvparena eval {DROP TABLE `pvparena`}
		pvparena eval {DROP TABLE 'ban_pvp'}
		return "PVP Arena Datenbank geloescht."
	}
	pvparena eval {CREATE TABLE IF NOT EXISTS `pvparena` (`name` TEXT, 'coords' TEXT)}
	pvparena eval {CREATE TABLE IF NOT EXISTS 'ban_pvp' ('name' TEXT, 'banned')}
	return "PVP Arena Datenbank erstellt."
 }
 proc ::GArena::GuardKilled {} {
	variable game_started
	variable guards_killed
	variable remain
	if { $game_started == 0 } { return 0 
	} else {
		incr guards_killed
		set remain [expr {4-$guards_killed}]
		Say $player 0 "Getoetete Waechter: $guards_killed. Verbleibend: $remain"
	}
 } 

 proc ::GArena::OnOpen { obj player lootid } {
	variable game_started
	variable guards_killed
	variable remain
	variable last_event
	set remain [expr {4-$guards_killed}]
	if { ($game_started == 0) } { 
		Say $player 0 "Es ist verschlossen, da das Spiel noch nicht gestartet wurde!" 
		return 0 
	} 
	if { ($guards_killed < 4 ) } { 
		Say $player 0 "Du musst alle 4 Waechter toeten bevor du deinen Preis bekommst. Verbleibende Waechter: $remain" 
		return 0 
	}
	if { $guards_killed >= 4 } { 
		set guards_killed 0
		set game_started 0
		set last_event [ clock seconds ] 
		return 1 
	}
 }

 proc ::GArena::arena { player cargs } {
	variable game_started
	variable guards_killed
	variable pvpon
	variable timediff
	variable last_event
	set now [ clock seconds ]
	set timetogo [expr {($last_event + $timediff)- $now}]
	set name [ ::GetName $player ]
	set pos [ ::GetPos $player ]
	set sele [ ::GetSelection $player ]
	set sname [ ::GetName $sele ]
	set option [ lindex $cargs 0 ]
	if { $option == "" } {
		if { [ ::GetPlevel $player ] < 4 } { set msg ".arena enter --> Enter PVP Arena \n.arena leave --> Leave PVP Arena" }
		set msg "Anleitung: \n.arena enable --> aktiviere den ARENA Befehl \n.arena disable --> deaktiviere den ARENA Befehl \n.arena enter --> Betrete die Arena \n.arena leave --> Verlasse die Arena \n.arena ban --> Banne den ausgewaehlten Spieler von der Benutzung des ARENA Befehls \n.arena unban --> UnBanne den ausgewaehlten Spieler von der Benutzung des ARENA Befehl"
	} else {
		switch $option {
			"info" { return "Naechstes Spiel in: $timetogo\nNeues Spiel alle: $timediff sek\nBefehl aktiviert $pvpon \nSpiel gestartet $game_started\nGetoetete Waechter $guards_killed" }
			"enable" { set pvpon 1; return "ARENA Befehl aktiviert" }
			"disable" { set pvpon 0; return "ARENA Befehl deaktiviert" }
			"enable_game" { set game_started 1; return "Spiel ist jetzt aktiviert" }
			"disable_game" { set game_started 0; return "Spiel ist jetzt deaktiviert" }
			"enter" {
			
				if { $last_event + $timediff <= $now} {
					set game_started 1
					if { $pvpon == 0 } { return "Befehl deaktiviert." }
					if { $game_started == 1 } { return "Booty Run event hat begonnen!" }
					if { [ string length [ pvparena eval { SELECT `name` FROM `pvparena` WHERE (`name` = $name) } ] ] } { return "Du bist bereits in der Arena" }
					if { [ string length [ pvparena eval { SELECT `name` FROM `ban_pvp` WHERE (`name` = $name) } ] ] } { return "Du wurdest von der Arena gebannt" }
					if { ! [ ::GetQFlag $player "jailed" ] } {
						pvparena eval { INSERT INTO `pvparena` (`name`, `coords`) VALUES($name, $pos) }
						::SetQFlag $player "garena"
						::Teleport $player 0 -13152.900391 342.729004 52.132801
						set msg "$name, Booty Run event hat begonnen! .arena leave --> verlasse die Arena" 
					} else {
						return [ ::Texts::Get "Du kannst die PVP Arena nicht betreten wenn du eingesperrt bist!" ]
					}
				} else { return "Naechster BOOTY RUN in $timetogo sek., sorry $name" }
			}
			"leave" {
				if { ! [ string length [ pvparena eval { SELECT `name` FROM `pvparena` WHERE (`name` = $name) } ] ] } { return "Bevor du die Arena verlassen kannst musst du sie betreten haben!" }
				if { ! [ ::GetQFlag $player "jailed" ] } {		
					if { ! [ $game_started ] } {
						pvparena eval { SELECT `coords` FROM `pvparena` WHERE (`name` = $name ) } {
							set map [lindex $coords 0]
							set x [lindex $coords 1]
							set y [lindex $coords 2]
							set z [lindex $coords 3]
							::Teleport $player $map $x $y $z
							::ClearQFlag $player "garena"
							pvparena eval { DELETE FROM `pvparena` WHERE (`name` = $name) }
							return "Zum letzten Ort zurueckgekehrt!"
						}
					} else { 
						return "Das Spiel hat noch nicht begonnen. Du kannst die Arena nicht verlassen bevor du sie nicht betreten hast!" }
				} else {
					return [ ::Texts::Get "Du bist eingesperrt!" ] }
			}
			"ban" {
				if { [ ::GetPlevel $player ] < 4 } { return "Du bist nicht berechtigt diesen Befehl zu benutzen!" }
				if { $sele == $player } { return "Du kannst den Befehl nicht auf dich selbst benutzen" }
				if { $sele == 0 || [ ::GetObjectType $sele ] != 4 } { return "Waehle einen Spieler aus" }
				if { [ string length [ pvparena eval { SELECT `name` FROM `ban_pvp` WHERE (`name` = $sname) } ] ] } { return "$sname ist bereits gebannt" }
				pvparena eval { INSERT INTO `ban_pvp` (`name`) VALUES($sname) }
				Say $sele 0 "Ich wurde aus der Arena verbannt!"
				return "$sname is now banned from Arena Events"			
			}
			"unban" {
				if { [ ::GetPlevel $player ] < 4 } { return "Du bist nicht berechtigt diesen Befehl zu benutzen!" }
				if { $sele == $player } { return "Du kannst den Befehl nicht auf dich selbst benutzen" }
				if { $sele == 0 || [ ::GetObjectType $sele ] != 4 } { return "Waehle einen Spieler aus" }
				if { ![ string length [ pvparena eval { SELECT `name` FROM `ban_pvp` WHERE (`name` = $sname) } ] ] } { return "$sname ist nicht gebannt" }
				pvparena eval { DELETE FROM `ban_pvp` WHERE (`name` = $sname) }
				Say $sele 0 "Der Bann von den Arena Events wurde aufgehoben"
				return "$sname ist jetzt nicht mehr von Arena Events verbannt"
			}
			"help" {
				if { [ ::GetPlevel $player ] < 4 } { set msg ".pvp enter --> Betrete die PVP Arena \n.pvp leave --> Verlasse die PVP Arena" }
				set msg "Anleitung: \n.pvp enable --> aktiviere den PVP Befehl \n.pvp disable --> deaktiviere den PVP Befehl \n.pvp enter --> Betrete die PVP Arena \n.pvp leave --> Verlasse die PVP Arena \n.pvp ban --> Banne den ausgewaehlten Spieler von der Benutzung des PVP Befehls \n.pvp unban --> UnBanne den ausgewaehlten Spieler von der Benutzung des PVP Befehl"
			}
		}
	}
}

Custom::HookProc "::WoWEmu::CalcXP" { if { [ ::GetEntry $victim ] == 25500 } { ::GArena::GuardKilled } }
Custom::AddCommand "arena" "::GArena::arena" 0
Custom::AddCommand "create_arenadb" "::GArena::create_arenadb" 4
